特定のDynamoDBテーブルのアイテムの操作のみ可能なIAMユーザー(ログインプロファイル)を作成する
こんにちは、CX事業本部 IoT事業部の若槻です。
今回は、Amazon DynamoDBの特定のテーブルのアイテムの操作のみ可能なIAMユーザー(ログインプロファイル)を作成してみました。
想定しているケース
- AWSマネジメントコンソールにアクセスしてDynamoDBテーブル上のアイテムをメンテナンスするオペレーションを、非エンジニアなユーザーに行ってもらいたい。
- 許可する操作は特定のDynamoDBテーブルに対するアイテムの変更(読み取り、作成、更新、削除)のみ。
- そのためのIAMユーザー(ログインプロファイル)を発行する。
ログインプロファイルの作成
まず、IAMユーザーにアタッチするポリシーを定義したファイルを作成します。fruits
およびvegetables
テーブルのアイテムのCRUD操作のみ可能なポリシーです。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "ListAndDescribe", "Effect": "Allow", "Action": ["dynamodb:ListTables"], "Resource": "*" }, { "Sid": "SpecificTable", "Effect": "Allow", "Action": [ "dynamodb:BatchGetItem", "dynamodb:DescribeStream", "dynamodb:DescribeTable", "dynamodb:Get*", "dynamodb:Query", "dynamodb:Scan", "dynamodb:BatchWriteItem", "dynamodb:DeleteItem", "dynamodb:UpdateItem", "dynamodb:PutItem" ], "Resource": [ "arn:aws:dynamodb:ap-northeast-1:*:table/fruits", "arn:aws:dynamodb:ap-northeast-1:*:table/vegetables" ] } ] }
IAMユーザーを作成します。
$ userName=ddbtable-operator $ aws iam create-user \ --user-name ${userName}
IAMユーザーにインラインポリシーをアタッチします。
$ policyName=ddbtable-operation $ aws iam put-user-policy \ --user-name ${userName} \ --policy-name ${policyName} \ --policy-document file://policy.json
IAMユーザーのログインプロファイルを作成します。
$ password=${password} $ aws iam create-login-profile \ --user-name ${userName} \ --password ${password} \ --password-reset-required
IAMユーザーのログインプロファイルが作成できました。
ユーザーへの情報通知
ログインプロファイルを使用するユーザーへ次の情報を通知します。
- サインインURL:
https://${accountId}.signin.aws.amazon.com/console
- ユーザー名:
${userName}
- パスワード:
${password}
DynamoDBコンソールへアクセスしてみる
まず、AWSマネジメントコンソールにアクセスします。
通知されたサインインURLをブラウザで開き、ユーザー名とパスワードを指定してサインインを行います。
初回のみパスワードの変更を要求されるので変更前後のパスワードを指定し、[パスワードの変更を確認]をクリックします。
パスワードの変更が完了し、コンソールにアクセスできました。
右上のメニューから適切なリージョン(今回は東京
)を選択して変更します。
中央上部の入力欄にdynamodb
を入力し、候補欄からDynamoDB
を選択します。
DynamoDBのコンソールへアクセスできました。
DynamoDBの操作をいろいろ試してみる
許可されていない操作
- 許可されていないテーブルの操作
テーブル一覧を開くと、ポリシーで許可したfruits
とvegetables
以外のテーブルはアクセス許可がありません
となりアクセスが出来なくなっています。
- テーブルの新規作成
[テーブルの作成]をクリックします。
テーブル作成画面でテーブルの情報を指定して作成しようとすると、エラーとなり作成できません。
- テーブルの削除
テーブル一覧で次はfruits
テーブルを選択します。
[アクション] - [テーブルの削除]を選択します。
削除をしてみます。
このようなダイアログとなります。
テーブル一覧に戻ってもfruits
テーブルは削除されていません。
- 許可されていないテーブル上のアイテムの操作
項目一覧を開き、操作を許可されていないdevices
テーブルを選択すると、操作メニューが何も表示されずロールには、テーブル fruits の情報を表示するためのアクセス許可がありません
というアクセス許可が無い旨のエラーとなりました。
許可されている操作
- 許可されたテーブル上のアイテムの操作
操作を許可されているfruits
テーブルを選択すると今度は操作メニューが表示されました。注意点として許可されていないテーブルを選択した状態で許可されたテーブルを選択すると引き続きアクセス許可が無い旨のエラーが出ますが、これは無視して構いません。(おそらくバグです)
- アイテムの作成
[項目の作成]をクリックします。
属性値を指定して[項目の作成]をクリックします。
fruitsテーブルにアイテムを作成できました。
- アイテムの更新
アイテムの更新(属性の追加)も問題なくできました。
- アイテムの削除
アイテムの削除ができました。
参考
- Amazon DynamoDB: 特定のテーブルへのアクセスを許可する - AWS Identity and Access Management
- S3の特定のバケットおよびキーのファイルの更新のみ可能なIAMユーザー(コンソールアクセスのみ)を作成してみた | DevelopersIO
以上